let {ApiError}= require('../utils/error');
let mongoose = require('mongoose');
const {errorLogger, infoLogger, con} = require('../config')['logger'];
module.exports = () => {
    return async (ctx, next) => {
        try {
            con.info('>>>>>:异常处理中间件处理开始');
            //先去执行路由
            await next();
            con.info('>>>>>>:没有异常,异常处理中间件处理结束');
        } catch (error) {
            con.info('>>>>>>:异常处理中间件处理,程序异常,有异常信息');
            errorLogger.error('>>>>>>:异常处理中间件,程序异常,异常信息为:', error);
            //如果异常类型是API异常并且通过正则验证的url，将错误信息添加到响应体中返回。
            //ctx.app.emit('error', err, ctx);
            if (error instanceof ApiError) {
                ctx.status = 200 || error.status || ctx.status || 200;
                ctx.body = {
                    code: error.code,
                    msg: error.msg,
                }
            }else if (error instanceof mongoose.CastError) {
                ctx.status = 200 || error.status || ctx.status || 500;
                ctx.body = {
                    code: 500,
                    msg: error && error.message,
                }
            } else if (error instanceof TypeError) {
                ctx.status = 200 || error.status || ctx.status || 500;
                ctx.body = {
                    code: 500,
                    msg: error && error.message,
                }
            } else {
                ctx.status = 200 || error.status || ctx.status || 500;
                ctx.body = {
                    code: 500,
                    msg: error && error.message,
                };
            }
        }
    }
};
